/**
 * 图片URL处理工具函数
 */

import { serviceIntegrationApi } from '@/service/api/bizhi'

// 缓存静态图片URL模板
let staticImageUrlTemplate: string | null = null
let templateLoadPromise: Promise<void> | null = null

/**
 * 加载静态图片URL模板
 */
async function loadStaticImageUrlTemplate(): Promise<void> {
  try {
    const result = await serviceIntegrationApi.getServiceConfig('system_a') as any
    const config = result.data
    if (config?.api_config?.staticImage?.urlTemplate) {
      staticImageUrlTemplate = config.api_config.staticImage.urlTemplate
    } else {
      staticImageUrlTemplate = ''
    }
  } catch (error) {
    console.error('加载静态图片URL模板失败:', error)
    staticImageUrlTemplate = ''
  }
}

/**
 * 获取静态图片URL模板
 */
export async function getStaticImageUrlTemplate(): Promise<string> {
  if (staticImageUrlTemplate === null) {
    if (!templateLoadPromise) {
      templateLoadPromise = loadStaticImageUrlTemplate()
    }
    await templateLoadPromise
  }
  return staticImageUrlTemplate || ''
}

/**
 * 生成完整的图片URL
 * @param filename 文件名或相对路径
 * @returns 完整的图片URL
 */
export async function generateImageUrl(filename: string): Promise<string> {
  if (!filename) return ''
  
  // 如果已经是完整URL，直接返回
  if (filename.startsWith('http://') || filename.startsWith('https://')) {
    return filename
  }
  
  // 获取URL模板
  const template = await getStaticImageUrlTemplate()
  
  if (!template) {
    // 如果没有配置模板，返回相对路径（兼容现有逻辑）
    return filename.startsWith('/') ? filename : `/${filename}`
  }
  
  // 使用模板生成完整URL
  return template.replace('{filename}', filename.replace(/^\/+/, ''))
}

/**
 * 生成完整的图片URL（同步版本，需要先调用过异步版本）
 * @param filename 文件名或相对路径
 * @returns 完整的图片URL
 */
export function generateImageUrlSync(filename: string): string {
  if (!filename) return ''
  
  // 如果已经是完整URL，直接返回
  if (filename.startsWith('http://') || filename.startsWith('https://')) {
    return filename
  }
  
  // 如果模板还未加载，返回相对路径
  if (staticImageUrlTemplate === null) {
    return filename.startsWith('/') ? filename : `/${filename}`
  }
  
  if (!staticImageUrlTemplate) {
    // 如果没有配置模板，返回相对路径
    return filename.startsWith('/') ? filename : `/${filename}`
  }
  
  // 使用模板生成完整URL
  return staticImageUrlTemplate.replace('{filename}', filename.replace(/^\/+/, ''))
}

/**
 * 批量生成图片URL
 * @param filenames 文件名数组
 * @returns 完整图片URL数组
 */
export async function generateImageUrls(filenames: string[]): Promise<string[]> {
  if (!filenames || filenames.length === 0) return []
  
  const template = await getStaticImageUrlTemplate()
  
  return filenames.map(filename => {
    if (!filename) return ''
    
    // 如果已经是完整URL，直接返回
    if (filename.startsWith('http://') || filename.startsWith('https://')) {
      return filename
    }
    
    if (!template) {
      // 如果没有配置模板，返回相对路径
      return filename.startsWith('/') ? filename : `/${filename}`
    }
    
    // 使用模板生成完整URL
    return template.replace('{filename}', filename.replace(/^\/+/, ''))
  })
}

/**
 * 清除缓存的URL模板（用于配置更新后）
 */
export function clearImageUrlTemplateCache(): void {
  staticImageUrlTemplate = null
  templateLoadPromise = null
}

/**
 * 预加载图片URL模板（可在应用启动时调用）
 */
export function preloadImageUrlTemplate(): Promise<void> {
  return getStaticImageUrlTemplate().then(() => {})
}

/**
 * 从完整URL中提取文件名
 * @param url 完整的图片URL
 * @returns 文件名
 */
export function extractFilenameFromUrl(url: string): string {
  if (!url) return ''
  
  // 如果是相对路径，直接返回
  if (!url.startsWith('http://') && !url.startsWith('https://')) {
    return url.replace(/^\/+/, '')
  }
  
  try {
    const urlObj = new URL(url)
    const pathname = urlObj.pathname
    return pathname.split('/').pop() || ''
  } catch (error) {
    console.error('解析URL失败:', error)
    return ''
  }
}
